# moduleFederation.options

- **Type:** `ModuleFederationConfig`
- **Default:** `undefined`
- **Version:** `>= 0.4.0`

Used to configure the Rspack's module federation plugin.

:::tip
There are several versions of Module Federation implementations. Before using `moduleFederation.options`, please read the [Module Federation guide](/guide/advanced/module-federation) to understand the differences between different versions of Module Federation and how to make choices.
:::

## Introduction

When using module federation, it is recommended that you use the `moduleFederation.options` option provided by Rsbuild. This option will automatically adjust some related configurations to ensure that the module federation application can run correctly.

When you set the `moduleFederation.options` option, Rsbuild will take the following actions:

- Automatically register the [ModuleFederationPlugin](https://rspack.dev/plugins/webpack/module-federation-plugin) plugin, and pass the value of `options` to the plugin.
- Set the default value of Rspack's [output.publicPath](https://rspack.dev/config/output#outputpublicpath) configuration to `'auto'`.
- Turn off the `split-by-experience` rules in Rsbuild's [performance.chunkSplit](/config/performance/chunk-split) as it may conflict with shared modules, refer to [#3161](https://github.com/module-federation/module-federation-examples/issues/3161).
- Turn off the splitChunks rule of remote entry.

## Usage

The type of `moduleFederation.options` is exactly the same as the ModuleFederationPlugin plugin of Rspack:

```ts title="rsbuild.config.ts"
export default defineConfig({
  moduleFederation: {
    options: {
      name: 'remote',
      // other options
    },
  },
});
```

Please refer to the [ModuleFederationPlugin](https://rspack.dev/plugins/webpack/module-federation-plugin) document for all available options.

## Example

Here is a minimal example:

- Remote App

```ts title="remote/rsbuild.config.ts"
import { defineConfig } from '@rsbuild/core';

export default defineConfig({
  server: {
    port: 3002,
  },
  moduleFederation: {
    options: {
      name: 'remote',
      exposes: {
        './Button': './src/Button',
      },
      filename: 'remoteEntry.js',
    },
  },
});
```

- Host App

```ts title="host/rsbuild.config.ts"
import { defineConfig } from '@rsbuild/core';

export default defineConfig({
  server: {
    port: 3002,
  },
  moduleFederation: {
    options: {
      name: 'host',
      remotes: {
        remote: 'remote@http://localhost:3002/remoteEntry.js',
      },
    },
  },
});
```

For more examples, please see:

- [Rsbuild - module-federation example](https://github.com/rspack-contrib/rspack-examples/tree/main/rsbuild/module-federation)
- [module-federation/module-federation-examples](https://github.com/module-federation/module-federation-examples)
